MediaServicesを使って勉強会のライブ配信をやってみた
こんにちは、大前です。
1/15 に行われた AKIBA.AWS #15 ガチ編〜re:Invent振り返り その1〜 にて、MediaServices を使ったライブ配信テストをやってみましたので、構成や、気付きなどについて書いていきたいと思います。
構成
構成図
以下の構成で構築や機材の準備を進めました。
後述しますが、当日は機材トラブルで構成が変わってしまったのでリベンジしたいと思います。。。
以下、細かい部分についてそれぞれ記述していきます。
全体の概要
映像・音声の入力
今回入力として使用する映像は「発表者PCの画面キャプチャ」と「発表者の顔元映像」の2つです。
発表者 PC の画面を ATEM mini 経由で配信用 PC に取り込むで画面のキャプチャを実現しています。
PC の映像を取り込む為には、一般的に HDMI キャプチャといった機材が必要となるのですが、ATEM mini は映像を USB で PC に出力する事が出来るため、非常に手軽に PC の画面キャプチャを実現する事が出来ます。本当に楽なのでオススメです。
ちなみに、ATEM mini はパンダスタジオ様 にてレンタルしています。買う前にレンタルして試せるのは良いですね。
発表者の顔元映像は、マイク付きの USB Camera で撮影し、直接配信用 PC に取り込んでいます。
現場の機材はこんな感じ。ATEM mini、ちっちゃくて可愛いです。
配信ソフトについて
配信ソフトは OBS を使用しました。
ATEM mini から取り込んだ発表者 PC の画面と発表者の顔元映像を OBS 上でミックスし、MediaLive に対して配信しました。
また、配信用 PC は有線を使用する事で、安定して配信を行える様に試みました。
AWS 環境について
MediaLive + MediaStore + CloudFront での配信としました。
配信用 PC から入力された映像を MediaLive で HLS にエンコードして MediaStore に格納し、CloudFront 経由で配信する様な構成です。
また、配信ページとなる HTML ファイルは S3 に格納し、視聴者はこの HTML にアクセス(CloudFront経由)する事で、ライブ配信を視聴する事が出来ます。
HLS の再生は Video.js で行なっています。ページの作成にあたっては、このブログ を参考にしました。
また、MediaStore には CORS の設定が必要です。参考
MediaLive には HLS 出力の他にアーカイブ出力の設定も行い、S3 にアーカイブファイルが出力される様に設定しました。
アーカイブは一定時間毎に ts ファイルで複数出力されるのですが、MediaConvert を使用する事で一本の MP4(H.264/AAC)にエンコードする事ができます。
こちらはイベント翌日に手動で行なったのですが、自動化を目指していきたいところです。
当日のトラブルと構成変更
上記の構成を用意し、当日の配信に望んだのですが、ATEM mini から会場に設置されているプロジェクターへのHDMI 出力がうまくいかないというトラブルが発生しました。
時間があればゆっくり原因の解明を行えたでしょうが、その時は準備時間中に問題を解決できそうになかったため、以下の構成に変更することにしました。
会場として弊社の会議室を使用していたのですが、弊社の会議室は Google Meets の出力が出来るようになっているため、登壇者には Google Meets に参加して発表してもらう事にしました。これにより、現地の映像出力は解決されます。
発表者 PC の画面キャプチャについては、別 PC を用意してその PC で Google Meets に参加し、その画面(=発表者のスライドが画面共有されている)を ATEM mini に取り込む事にしました。
そのため、下記の様に Google Meets の画面が配信される形となりました。
この構成でなんとか配信が出来ましたが、やはり配信者 PC の画面を直接キャプチャして配信したかったので、またリベンジしたいと思います。
やってみて学んだ事・気付き
本番と同じ環境での動作確認は必ずやろう
上記の現場トラブルにある通り、本番と全く同じ環境で事前チェックする事の重要性をひしひしと実感しました。
AWS 環境や配信 PC、機材については前日にテストを行なっていたのですが、会場で配信が出来るかについては確認していませんでした。
会場が弊社の会議室だった事もあり、「まぁ HDMI 刺せば出力されるやろ〜〜」ぐらいの気持ちでいましたが、見事にしっぺ返しが来ました。
次はしっかりと現地での事前確認も行いたいと思います。
マイクが拾う音のチェックはちゃんとしておこう
配信の確認をする際、映像がちゃんと表示されるかだけ確認出来たら満足するのではなく、音も確認しましょう。
使用するマイクの性能や、マイクの設置場所によって、ノイズ(近くにある機材音や環境音)が入ります。
これについては事前確認をしっかり行えていたのですが、テストをしてみて、想像以上にノイズが入ってしまうことがわかりました。(間に合わせで買った安いウェブカムのマイクを使ったからというのもあります)
対策としては、OBS 上でノイズのフィルタリング設定が出来たので、そちらの値を調整することでノイズの除去を試みました。
結果的に、ノイズがほぼ入っていない良い音で配信をすることが出来ました。
意外と安定して配信が出来た
正直、配信が止まってしまったりするだろうと考えていましたが、結果的にイベント(約2時間)を通して安定した配信が行えました。
下は MediaLive のモニタリング画面ですが、これを見てもずっと安定して配信できていたことが確認出来ます。
今回の構成だと配信用 PC から AWS(MediaLive)に映像を送る回線のみがネックなので、そこを有線で安定した回線で行えたことが今回の安定した配信に繋がったのだと思います。
仮に Wifi 環境で配信を行なっていたら、ここまで安定していなかったと思います。
あとは、配信用 PC 自体が落ちてしまう事もネックではありますが、アクティビティモニタを観察していた限りだと 特に問題なさそうでした。ただ、CPU 使用率がそこそこ高かったので、配信用 PC 上でのタスクはこれ以上増やさない方が良いかな、という感覚です。
今後やっていきたい事
まだまだ「とりあえず配信が出来た」状態で改善点が多いので、今後も色々と試していきたいと思います。
MediaLive のパラメータを最適化したり、MediaPackage を使用してみたり、AI サービスと組み合わせてみたり、MSAM を使ったライブ配信ワークフローの監視を行なったり、、、、
色々と出来ることはあると思うので、少しずついろんな技術を試してみたいと思います。
終わりに
MediaServices を使用して、社内勉強会のライブ配信をやってみました。
ちょっとしたトラブル等もありましたが、概ねやりたい事が実現できたのでかなり満足しています。
また機会があれば、構成をパワーアップさせてチャレンジしたいと思います。
以上、AWS 事業本部の大前でした。